@echo off
chcp 65001
setlocal enabledelayedexpansion 
 
::: 设置cwebp路径 
set "cwebp_path=E:\数据\生存战争系列\工具\libwebp1.4带脚本\cwebp.exe"  
call "%cwebp_path%" -version
 
:: 检查工具是否存在 
if not exist "%cwebp_path%" (
    echo 错误：找不到 cwebp.exe  
    echo 请从 https://developers.google.com/speed/webp/download   下载 
    pause
    exit /b 1 
)

:: 设置源文件夹和目标文件夹
set "source_folder=E:\数据\生存战争系列\完美世界2.4\bin\Release"
set "target_folder=E:\数据\生存战争系列\完美世界2.4\bin\Release"
 
:: ================ 新增：用户自定义大小阈值 ================
:: 设置默认阈值（单位KB）
set "default_threshold=20"
:: 获取用户输入
set /p "size_threshold_kb=请输入大小阈值（KB，默认%default_threshold%KB）: "
:: 使用默认值（如果用户未输入）
if not defined size_threshold_kb set "size_threshold_kb=%default_threshold%"
:: 将KB转换为字节（乘以1024）
set /a "size_threshold=size_threshold_kb*1024"
echo 将按 [!size_threshold_kb!KB/!size_threshold!字节] 作为阈值区分压缩方式
echo.
:: ========================================================
 
:: 检查目标文件夹是否存在，如果不存在则创建
if not exist "%target_folder%" (
    mkdir "%target_folder%"
)
 
:: 递归遍历源文件夹及其子文件夹中的所有 .png 文件
for /r "%source_folder%" %%i in (*.png) do (
    :: 获取文件名（不含路径）
    set "filename=%%~nxi"
    
    :: 获取文件的相对路径（相对于源文件夹）
    set "relative_path=%%~dpi"
    set "relative_path=!relative_path:%source_folder%=!"
    
    :: 创建目标文件夹中的相应子文件夹 
    if not "!relative_path!"=="" (
        set "sub_target_folder=%target_folder%!relative_path!"
        if not exist "!sub_target_folder!" (
            mkdir "!sub_target_folder!"
        )
    ) else (
        set "sub_target_folder=%target_folder%"
    )
    
    :: 构建输出文件的完整路径 
    set "output_file=!sub_target_folder!\!filename:~0,-4!.webp"
    
    :: 获取文件大小（单位：字节）
    set "file_size=%%~zi"
    
    :: 文件大小小于阈值时，进行无损压缩
    if !file_size! LSS !size_threshold! (
        echo 文件 %%~nxi 小于 !size_threshold_kb!KB，执行无损压缩。 
        "%cwebp_path%" -lossless -o "!output_file!" "%%i"
    ) else (
        echo 文件 %%~nxi 大于等于 !size_threshold_kb!KB，执行有损压缩。 
        "%cwebp_path%" -preset default -q 90 -m 6 -mt -af -o "!output_file!" "%%i"
    )
    
    :: 检查转换是否成功 
    if exist "!output_file!" (
        echo 文件 "%%i" 已成功转换为 "!output_file!"。 
        
        :: 删除原始文件 
        del "%%i"
        echo 原始文件 "%%i" 已删除。
    ) else (
        echo 文件 "%%i" 转换失败，跳过删除操作。
    )
    
    :: 添加空行间隔 
    echo.
)
 
echo 所有转换已完成。
echo 使用的大小阈值: !size_threshold_kb!KB (!size_threshold!字节)
endlocal
pause